﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using Insifo.WE;
using Microsoft.Reporting.WebForms;
using System.Collections.Specialized;

public partial class genUnidadMedidaListar : ObjectPage
{
    #region CONSTANTES

    protected const string EDITAR_RUTA = "~/Gen/genUnidadMedidaEditar.aspx";

    #endregion

    #region EVENTOS

    protected void Page_Load(object sender, EventArgs e)
    {
        //Eventos del Master
        Master.MenuAccionEvento += new MasterPageMenuListarClickHandler(Master_MenuButton);
        if (!IsPostBack)
        {
            Cargar();
            Listar();
        }
    }

    protected void Master_MenuButton(object sender, EventArgs e)
    {
        string strAccion = ((CommandEventArgs)e).CommandName;
        switch (strAccion)
        {
            case "Nuevo":
                Nuevo();
                break;
            case "Buscar":
                ucpagLista.NumeroPagina = 1;
                Listar();
                break;
            case "Exportar":
                Exportar();
                break;
        }
    }

    protected void ucpagLista_CambioPagina(object sender, EventArgs e)
    {
        Listar();
    }

    protected void lvLista_ItemCommand(object sender, ListViewCommandEventArgs e)
    {
        string strIdModelo = e.CommandArgument.ToString();
        switch (e.CommandName)
        {
            case "Editar":
                Editar(strIdModelo);
                break;
        }
    }

    protected void chkEstandar_CheckedChanged(object sender, EventArgs e)
    {
        Listar();
    }

    #endregion

    #region METODOS

    protected void Cargar()
    {
        ucpagLista.NumeroPagina = 1;
        ddlEstado.SelectedIndex = 0; 
        txtDescripcion.Text = string.Empty;
        Util.loadCombo(ddlEstado, ListarParametroDetalle(1, 1, Constantes.PARAMETRO_ESTADOREGISTRO), "Descripcion", "ParametroDetalle");
        if (!string.IsNullOrEmpty(Request.QueryString["f"]))
            SetarParametros();
    }

    protected void Nuevo()
    {
        string strCadena = "?a=n";
        Util.Redireciona(EDITAR_RUTA, strCadena, true);
    }


    protected void Listar()
    {
        int intTotalFilas = 0, intFilasXPagina = 0;

        string strCodigoUnidadMedida = txtCodigo.Text.Trim();
        string strDescripcion = txtDescripcion.Text.Trim();
        string strEstado = ddlEstado.SelectedValue;

        DataTable dt = ListarUnidadMedida(strCodigoUnidadMedida, strDescripcion, strEstado, ucpagLista.NumeroPagina);
        lvLista.DataSource = dt;
        lvLista.DataBind();
        if (dt.Rows.Count > 0)
        {
            intFilasXPagina = Convert.ToInt32(dt.Rows[0]["FilasXPagina"]);
            intTotalFilas = Convert.ToInt32(dt.Rows[0]["TotalFilas"]);
        }
        ucpagLista.TotalRegistros = intTotalFilas;
        ucpagLista.RegistrosPorPagina = intFilasXPagina;
        ucpagLista.EnlazarPaginador();
    }

    protected void Editar(string strIdModelo)
    {
        string strCadena = "?a=e&f=" + ObtenerFiltroParametro() + "&i=" + strIdModelo;
        Util.Redireciona(EDITAR_RUTA, strCadena, true);
    }

    protected void Exportar()
    {
        string strCodigoUnidadMedida = txtCodigo.Text.Trim();
        string strDescripcion = txtDescripcion.Text.Trim();
        string strEstado = ddlEstado.SelectedValue;

        DataTable dt = ListarUnidadMedida(strCodigoUnidadMedida, strDescripcion, strEstado, 0);
        dt.Columns.Remove("FilasXPagina");
        dt.Columns.Remove("TotalFilas");

        UtilExcel ut = new UtilExcel();
        ut.ExportaAExcelHoja(dt, Resources.resDiccionario.Archivo, Resources.resDiccionario.Datos);
    }

    private void SetarParametros()
    {
        string[] SeteaerFiltro = Request.QueryString["f"].ToString().Split('|');
        txtCodigo.Text = SeteaerFiltro[0];
        txtDescripcion.Text = SeteaerFiltro[1];
        ddlEstado.SelectedValue = SeteaerFiltro[2];
    }

    private string ObtenerFiltroParametro()
    {
        string Filtros = string.Empty;
        Filtros = txtCodigo.Text; // 0.-
        Filtros = Filtros + "|" + txtDescripcion.Text;// 1.-
        Filtros = Filtros + "|" + ddlEstado.SelectedValue;// 2.-
        return Filtros;
    }
    #endregion

    #region WEBSERVICES

    /// <summary>
    /// Método Lista Niveles de Alerta
    /// </summary>
    /// <returns>Devuelve un DataSet</returns>
    protected DataTable ListarUnidadMedida(string pstrCodigoUnidadMedida, string pstrDescripcion, string pstrEstado, int pintPagina)
    {
        WCUnidadMedida.BEUnidadMedida be = new WCUnidadMedida.BEUnidadMedida();
        be.CodigoUnidadMedida = pstrCodigoUnidadMedida;
        be.Descripcion = pstrDescripcion;
        be.Estado = pstrEstado;
        be.Pagina = pintPagina;
        DataTable dt = new DataTable();
        using (var client = new ServiceClient<WCUnidadMedida.IWCUnidadMedida>("BasicHttpBinding_IWCUnidadMedida"))
        {
            var response = client.ServiceOperation<DataTable>(
               c => c.Listar(be).Tables[0]
               );
            ;
            dt = response;
        }
        return dt;
    }

    /// <summary>
    /// Método Lista Companias
    /// </summary>
    /// <returns>Devuelve un dataTable</returns>
    protected DataTable ListarParametroDetalle(int pintidCompania, int pintIdAplicacion, string pstrParametro)
    {
        WCParametroDetalle.BEParametroDetalle be = new WCParametroDetalle.BEParametroDetalle();
        be.IdCompania = pintidCompania;
        be.IdAplicacion = pintIdAplicacion;
        be.Parametro = pstrParametro;
        DataTable dt = new DataTable();
        using (var client = new ServiceClient<WCParametroDetalle.IWCParametroDetalle>("BasicHttpBinding_IWCParametroDetalle"))
        {
            var response = client.ServiceOperation<DataTable>(c => c.Listar(be).Tables[0]);
            dt = response;
        }
        return dt;
    }

    #endregion
}